Localization is a process of adding support of another human language (referred to as target language) to an application. Localization can be divided into two parts: localization of user interface data and localization of other data. User interface data includes a limited number of data elements, which are defined during application development. User interface data elements can be defined in text, graphics or other form.
User interfaces of many applications can be localized if an environment supports the target language. The term “environment” includes operating system, programming language and application libraries, fonts and character tables. If the environment supports the target language, the localized version of the application for the target language can be created using the following “straightforward” method: take source or binary code of the application and replace string constants with corresponding string constants in the target language. The straightforward method is expensive for large applications because: a) the localization process must be repeated for every new version of the application; and b) the personnel that perform the localization must deal with the application source or binary code.
A widely known solution to the problems of the straightforward method is to keep language-specific data in resource files, because multi-language support in application architecture can reduce cost of localization. The resource files contain key-value pairs, and the application locates data elements in the resource files by finding a value corresponding to a certain key. However, this approach also has a disadvantage: the programmer has to write a function call for every localized string, which results in large amount of function code dedicated to localization, for example, to retrieve localized strings for a current language.
The JAVA® programming language simplifies the implementation of resource file-based solution by providing java.util.ResourceBundle class in the standard library. This class provides support for human language-specific resource files. However, if the programmer uses class ResourceBundle directly, the amount of code dedicated to localization still remains large. In addition, localization-specific code is typically spread all over the application code, making it difficult to read and maintain.